﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int a = 0x11223344;
//	int* p = &a;
//	if (*p != 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}

//int check_sys()
//{
//	int a = 1;
//	return (*(char*)&a);
//}
//
//
//int main()
//{
//	int ret = check_sys();
//	if(ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	//00000000
//	//10000000000000000000000000000001   //内存中-1原码中存储格式
//	//11111111111111111111111111111110    //-1的反码
//	//11111111111111111111111111111111    //-1的补码
//	//11111111											     //类型为char，取高地址8个比特，最高位为1
//	// 11111111111111111111111111111111   //进行整型提升，因为最高位为1所以都补1  此时为补码
//	//10000000000000000000000000000000    //此时为反码
//	//10000000000000000000000000000001    //原码
//	char a = -1;
//	signed char b = -1;
//	unsigned char c = -1;
//	//11111111111111111111111111111111      //-1在内存中补码存储格式
//	// 11111111											      //类型为char类型，取高地址8个比特位，最高位为1
//	//00000000000000000000000011111111     //进行整型提升，因为c为无符号类型，所以补0   此时为补码
//	//00000000000000000000000011111111     //反码    最高位为0，是一个正整数，正整数的原反补的一样的
//	//00000000000000000000000011111111     //原码
//	printf("a=%d,b=%d,c=%d", a, b, c);
//	return 0;
//}

//#include <stdio.h>
//int main1()
//{
//	//00000000
//	//10000000000000000000000010000000    //-128在内存中存储格式   原码
//	//11111111111111111111111101111111    //反码
//	//11111111111111111111111110000000    //补码
//	//10000000                                                //char类型，高地址取8个比特
//	//11111111111111111111111110000000     //%u为无符号打印一个整数，此时原反补是一样的，此时直接这样打印
//	char a = -128;
//	printf("%u\n", a);
//	return 0;
//}
//
//
//
//
//#include <stdio.h>
//int main()
//{
//	//00000000
//	//00000000000000000000000010000000    //128在内存中存储格式   原码
//	//00000000000000000000000010000000    //反码
//	//00000000000000000000000010000000    //补码
//	//10000000                                               //char类型，高地址取8个比特
//	//11111111111111111111111110000000	//%u为无符号打印一个整数，此时原反补是一样的，此时直接这样打印
//	char a = 128;
//	printf("%u\n", a);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%d", strlen(a));
//	return 0;
//}

//#include <stdio.h>
//unsigned char i = 0;
//int main()
//{
//	for (i = 0; i <= 255; i++)
//	{
//		printf("hello world\n");
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%u\n", i);
//	}
//	return 0;
//}

//#include <stdio.h>
////X86环境 ⼩端字节序
//int main()
//{
//	int a[4] = { 1, 2, 3, 4 };
//	int* ptr1 = (int*)(&a + 1);     //取整个地址，整个地址+1
//	int* ptr2 = (int*)((int)a + 1);  //a强制类型转换，字节+1
//	printf("%x,%x", ptr1[-1], *ptr2);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	*pFloat = 9.0;
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	return 0;
//}


//struct tag
//{
//	member-list
//};

//struct student
//{
//	char name[20];
//	int age;
//	int score;
//}s1, s2 = {"李华",18,88};  //第一种初始化
//
//struct student s3 = { "小明",20,100 };   //第二种初始化
//
//int main()
//{
//	struct student s4 = { "张三",15,70 };    //第三种初始化
//	struct student s5 = { .score = 99,.name = "小红",.age = 22 };  //第四种初始化
//	return 0;
//}


//struct 
//{
//	int a;
//	char b;
//	float c;
//}x,*p;\


//struct stu
//{
//	int a;
//	struct stu next;
//};

//typedef struct Node
//{
//	int data;
//	struct Node* next;
//}Node;

////练习1
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//printf("%d\n", sizeof(struct S1));
////练习2
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//printf("%d\n", sizeof(struct S2));
////练习3
//struct S3
//{
//	double d;
//	char c;
//	int i;
//};
////printf("%d\n", sizeof(struct S3));
//////练习4-结构体嵌套问题
//struct S4
//{
//	char c1;
//	struct S3 s3;
//	double d;
//};
//int main()
//{
//	printf("%d\n", sizeof(struct S4));
//	return 0;
//}

//#pragma pack(4)//设置对齐数变为4
//struct stu
//{
//	char a;
//	int b;
//	char d;
//	double c;
//};
//#pragma pack()//取消设置的对齐数，还原默认
//int main()
//{
//	printf("%zd\n", sizeof(struct stu));
//}


//struct stu
//{
//	char name[10];
//	int age;
//};
//
//struct stu s1 = { "xiaoming",28 };
//
//void print1(struct stu s1)
//{
//	printf("%d,%s\n", s1.age, s1.name);
//}
//
//void print2(struct stu* s1)
//{
//	printf("%d,%s\n", s1->age, s1->name);
//}
//int main()
//{
//	print1(s1);
//	print2(&s1);
//	return 0;
//}

struct stu
{
	int _a : 4;
	int _b : 10;
	int _c : 1;
	int _d : 20;
};

int main()
{
	struct stu s = { 0 };
	int n = 0;
	scanf("%d", &n);
	s._a = n;
	return;
}